/*
题目：编写程序，输入两行字符串A和B，实现功能从字符串A中把字符串B所包含的字符全部删掉，将剩下的字符组成的字符串打印出来。
提示：接收命令行中一行字符串可以采用gets，但这个函数比较危险，已经过时，不建议使用，你可以用更安全的fgets()函数，具体用法参见第四次课后作业的代码框架。
输入格式：
两行先后给出字符串 A 和 B。两字符串的长度都不超过 100，并且保证每个字符串都是由可见的 ASCII 码和空白字符组成，最后以换行符结束。
输出格式：
在一行中打印从字符串 A 中把字符串 B 所包含的字符全删掉，剩下的字符组成的字符串。
输入样例：
I love C language! It's fun!
oune!
输出样例：
I lv C lagag It's f
*/
#include <stdio.h>  
#include <stdlib.h>  
#include <string.h>  
  
char *find_unique_chars(const char *A, const char *B) {  
    char *result = NULL;  
    size_t lenA = strlen(A);  
    size_t result_len = 0;  
  
    for (size_t i = 0; i < lenA; ++i) {  
        if (strchr(B, A[i]) == NULL) {  
            ++result_len;  
        }  
    }  
  
    result = (char *)malloc(result_len + 1);  
    if (result == NULL) {  
        perror("malloc failed");  
        return NULL;  
    }  
  
    size_t k = 0;  
    for (size_t i = 0; i < lenA; ++i) {  
        if (strchr(B, A[i]) == NULL) {  
            result[k++] = A[i];  
        }  
    }  
    result[k] = '\0';  
  
    return result;  
}  
  
int main() {  
    char A[101];  
    char B[101];  
  
    if (fgets(A, sizeof(A), stdin) == NULL) {  
        perror("fgets A failed");  
        return 1;  
    }  
    A[strcspn(A, "\n")] = 0; 
    if (fgets(B, sizeof(B), stdin) == NULL) {  
        perror("fgets B failed");  
        return 1;  
    }  
    B[strcspn(B, "\n")] = 0;  
  
    char *result = find_unique_chars(A, B);  
    if (result != NULL) {  
        printf("%s\n", result);  
        free(result);  
    }  
  
    return 0;  
}